<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Object.is方法</title>
</head>
<body>
  <script>
    // ES5 比较俩个值是否相等，只有俩个运算符：相等运算符(==)和严格相等运算符(===)。，它们都有缺点，前者会自动转换数据类型，后者NaN不等于自身
    // 以及 +0等于-0 JavaScript缺乏一种运算，在所有环境中，只要俩个值是一样的，它们就应该相等。
   // es6 提出“Same-value equality”(同值相等)算法，用来解决这个问题。Object.is就是部署这个算法的新方法。它们用来比较俩个值是否严格相等，
   // 与严格比较运算符的行为基本一致。
    var a = Object.is('foo', 'foo');
    console.log(a) // true
    var b = Object.is({}, {})
    console.log(b) // false
    // 不同之处只有俩个： 一是 +0不等于-0不等于-0，二是NaN等于自身。
    +0 === -0; //true
    NaN === NaN;// false

    Object.is(+0, -0); // false
    Object.is(NaN, NaN); // true
    // es5 可以通过下面的代码部署Object.is
    Object.defineProperty(Object, 'is', {
      value: function(x, y) {
        if (x === y) {
          // 针对+0不等于-0的情况
          return x !== 0 || 1 / x === 1 / y;
        }
        // 针对NaN的情况
        return x !== x && y !== y;
      },
      configurable: true,
      enumerable: false,
      writable: true
    });
  </script>
</body>
</html>